OAuth2 এর মাধ্যমে Access Token সংগ্রহ করা

Java Technologies - স্প্রিং বুট ক্লায়েন্ট (Spring Boot Client) - Spring Boot এবং OAuth2 Integration
125

Spring Boot ক্লায়েন্টে OAuth2 এর মাধ্যমে Access Token সংগ্রহ করা একটি সাধারণ কাজ, বিশেষত যখন API সুরক্ষিত থাকে এবং অ্যাক্সেসের জন্য টোকেন প্রয়োজন হয়। নিচে একটি উদাহরণসহ ধাপে ধাপে প্রক্রিয়াটি ব্যাখ্যা করা হলো।


OAuth2 Access Token সংগ্রহের ধাপসমূহ

  1. ডিপেনডেন্সি যোগ করুন Spring Security এবং OAuth2 ক্লায়েন্ট লাইব্রেরি যোগ করুন।

    Maven Dependency:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>
    

  1. Application Properties বা YAML ফাইল কনফিগার করুন OAuth2 প্রোভাইডার সম্পর্কিত তথ্য সেট করুন। যেমন, ক্লায়েন্ট আইডি, সিক্রেট, এবং টোকেন ইউআরএল।

    application.properties:

    spring.security.oauth2.client.registration.my-client.client-id=your-client-id
    spring.security.oauth2.client.registration.my-client.client-secret=your-client-secret
    spring.security.oauth2.client.registration.my-client.authorization-grant-type=client_credentials
    spring.security.oauth2.client.registration.my-client.scope=read,write
    spring.security.oauth2.client.provider.my-client.token-uri=https://auth-server.com/oauth/token
    

    ব্যাখ্যা:

    • client-id: OAuth প্রোভাইডার থেকে প্রাপ্ত ক্লায়েন্ট আইডি।
    • client-secret: OAuth প্রোভাইডার থেকে প্রাপ্ত সিক্রেট।
    • authorization-grant-type: সাধারণত client_credentials
    • token-uri: টোকেন সংগ্রহ করার জন্য ইউআরএল।

  1. RestTemplate বা WebClient ব্যবহার করে Access Token সংগ্রহ করুন

    RestTemplate ব্যবহার করে:

    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Service;
    import org.springframework.web.client.RestTemplate;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpEntity;
    import org.springframework.http.HttpMethod;
    
    import java.util.Base64;
    import java.util.HashMap;
    import java.util.Map;
    
    @Service
    public class OAuth2TokenService {
    
        private final RestTemplate restTemplate;
    
        public OAuth2TokenService(RestTemplate restTemplate) {
            this.restTemplate = restTemplate;
        }
    
        public String getAccessToken() {
            String url = "https://auth-server.com/oauth/token";
    
            // Basic Authentication Header
            String clientId = "your-client-id";
            String clientSecret = "your-client-secret";
            String credentials = clientId + ":" + clientSecret;
            String encodedCredentials = Base64.getEncoder().encodeToString(credentials.getBytes());
    
            HttpHeaders headers = new HttpHeaders();
            headers.add("Authorization", "Basic " + encodedCredentials);
            headers.add("Content-Type", "application/x-www-form-urlencoded");
    
            Map<String, String> body = new HashMap<>();
            body.put("grant_type", "client_credentials");
    
            HttpEntity<Map<String, String>> request = new HttpEntity<>(body, headers);
    
            ResponseEntity<Map> response = restTemplate.exchange(url, HttpMethod.POST, request, Map.class);
            return response.getBody().get("access_token").toString();
        }
    }
    

  1. WebClient ব্যবহার করে:

    import org.springframework.web.reactive.function.client.WebClient;
    import org.springframework.stereotype.Service;
    import reactor.core.publisher.Mono;
    
    @Service
    public class OAuth2TokenService {
    
        private final WebClient webClient;
    
        public OAuth2TokenService(WebClient.Builder webClientBuilder) {
            this.webClient = webClientBuilder.baseUrl("https://auth-server.com").build();
        }
    
        public Mono<String> getAccessToken() {
            return webClient.post()
                    .uri("/oauth/token")
                    .headers(headers -> {
                        headers.setBasicAuth("your-client-id", "your-client-secret");
                        headers.setContentType(org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED);
                    })
                    .bodyValue("grant_type=client_credentials")
                    .retrieve()
                    .bodyToMono(Map.class)
                    .map(response -> response.get("access_token").toString());
        }
    }
    

  1. Spring Security OAuth2 Client (Auto-Configuration ব্যবহার): Spring Security-এর OAuth2 Client ব্যবহার করলে Spring নিজেই টোকেন সংগ্রহ করতে পারে।

    Service Class উদাহরণ:

    import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
    import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager;
    import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
    import org.springframework.security.oauth2.client.web.reactive.function.client.ServerOAuth2AuthorizedClientExchangeFilterFunction;
    import org.springframework.stereotype.Service;
    import org.springframework.web.reactive.function.client.WebClient;
    
    @Service
    public class ApiService {
    
        private final WebClient webClient;
    
        public ApiService(OAuth2AuthorizedClientManager authorizedClientManager) {
            this.webClient = WebClient.builder()
                    .filter(new ServerOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager))
                    .build();
        }
    
        public Mono<String> fetchData() {
            return webClient.get()
                    .uri("https://api.example.com/protected-resource")
                    .retrieve()
                    .bodyToMono(String.class);
        }
    }
    

উদাহরণ Access Token ব্যবহার করে API কল

Access Token সংগ্রহের পর এটি HTTP Header-এ পাঠিয়ে API কল করা হয়।

public String fetchData(String accessToken) {
    HttpHeaders headers = new HttpHeaders();
    headers.add("Authorization", "Bearer " + accessToken);

    HttpEntity<String> entity = new HttpEntity<>(headers);

    String apiUrl = "https://api.example.com/protected-resource";
    ResponseEntity<String> response = restTemplate.exchange(apiUrl, HttpMethod.GET, entity, String.class);

    return response.getBody();
}

উপসংহার

Spring Boot-এ OAuth2 Access Token সংগ্রহের জন্য:

  1. Spring Security OAuth2 Client ব্যবহার করুন যদি স্বয়ংক্রিয়ভাবে টোকেন সংগ্রহ করতে চান।
  2. ম্যানুয়ালি করতে হলে RestTemplate বা WebClient ব্যবহার করুন।

এটি নিরাপদ অ্যাপ্লিকেশন তৈরির একটি গুরুত্বপূর্ণ অংশ।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...